#include "formes.h"

Piece* Creer_piece(void)
{
	Piece* sortie = (Piece*)malloc(sizeof(Piece)); /* on alloue de la place en mémoire pour créer une pièce */
	int i, j;
	sortie->c = VIDE;
	sortie->PosX_piece = -MAX_TAILLE_PIECE_X - 1; /*indique une piece hors terrain*/
	sortie->PosY_piece = -MAX_TAILLE_PIECE_X - 1; /* " " " "*/
	for ( i = 0 ; i < MAX_TAILLE_PIECE_X ; i++ )
	{
		for ( j = 0 ; j < MAX_TAILLE_PIECE_Y; j++)
		{
			sortie->forme[i][j] == 0; /* à la création de la piece celle-ci est "vide"*/
		}
	}
	return sortie;
}

void Detruire_piece(Piece* P) /* detruit la piece P*/
{
	if ( P != NULL )
	{
		free(P);
	}
}

void Initialiser_piece(Piece* P, Couleur C, int F[MAX_TAILLE_PIECE_X][MAX_TAILLE_PIECE_Y])
{
	int i, j;
	P->c = C;
	for ( i = 0 ; i < MAX_TAILLE_PIECE_X ; i++ )
	{
		for ( j = 0 ; j < MAX_TAILLE_PIECE_Y; j++)
		{
			P->forme[i][j] = F[i][j];
			/*printf("%d,%d = %d\n", i, j, F[i][j]);
			printf("%d,%d = %d\n", i, j,P->forme[i][j]);*/
		}
	}
}

void Rotation_piece(Piece* P)
{
	int tmp[MAX_TAILLE_PIECE_X][MAX_TAILLE_PIECE_Y];
	int i, j ;
	for ( i = 0 ; i < MAX_TAILLE_PIECE_X ; i++ )
	{
		for ( j = 0 ; j < MAX_TAILLE_PIECE_Y; j++)
		{
			tmp[MAX_TAILLE_PIECE_X-j][i] = P->forme[i][j]; /* verifier que c'est la bonne relation ? */ /*hmm ... ça m'a l'air un peu simple :D */
		}
	}
	/* la piece est retournée a 90° a droite, tmp correspond a cette nouvelle rotation*/
	for ( i = 0 ; i < MAX_TAILLE_PIECE_X ; i++ )
	{
		for ( j = 0 ; j < MAX_TAILLE_PIECE_Y; j++)
		{
			P->forme[i][j] = tmp[i][j];
		}
	}
}

int est_vide(Piece* P)
{
	int i, j;
	for ( i = 0 ; i < MAX_TAILLE_PIECE_X ; i++)
	{
		for ( j = 0 ; j < MAX_TAILLE_PIECE_Y ; j++)
		{
			if ( P->forme[i][j] == 1 )
			{
				return FALSE;
			}
		}
	}
	return TRUE;
}

void afficher_piece(Piece* P)
{
	int i, j;
	for ( i = 0 ; i < MAX_TAILLE_PIECE_X ; i++)
	{
		for ( j = 0 ; j < MAX_TAILLE_PIECE_Y ; j++)
		{
			printf("%d",P->forme[i][j] == 1);
		}
		printf("\n");
	}

}


int Formes[9][MAX_TAILLE_PIECE_X][MAX_TAILLE_PIECE_Y] ={\
/*BARRE*/
0,1,0,0,\
0,1,0,0,\
0,1,0,0,\
0,1,0,0,\
\
/*L*/
0,0,0,0,\
0,1,0,0,\
0,1,0,0,\
0,1,1,0,\
\
/*L_NORMAL*/
0,1,0,0,\
0,1,0,0,\
0,1,1,0,\
0,0,0,0,\
\
/*L_INVERSE*/
0,0,1,0,\
0,0,1,0,\
0,1,1,0,\
0,0,0,0,\
\
/*TRIANGLE*/
0,0,0,0,\
0,1,0,0,\
1,1,1,0,\
0,0,0,0,\
\
/*CARRE*/
0,0,0,0,\
0,1,1,0,\
0,1,1,0,\
0,0,0,0,\
\
/*ESCALIER*/
0,1,0,0,\
0,1,1,0,\
0,0,1,0,\
0,0,0,0,\
\
/*ESCALIER_INVERSE*/
0,0,1,0,\
0,1,1,0,\
0,1,0,0,\
0,0,0,0,\
\
/*PIECE8*/
1,1,0,0,\
0,1,0,0,\
0,1,1,0,\
0,0,1,0,\
\
/*CROIX*/
0,1,0,0,\
1,1,1,0,\
0,1,0,0,\
0,0,0,0,\
\
}







